package serializer

import (
	"file_sys_server/model"
)

// Response 基础序列化器
type Response struct {
	Code  int         `json:"code"`
	Data  interface{} `json:"data,omitempty"`
	Msg   string      `json:"msg"`
	Error string      `json:"error,omitempty"`
}

// TrackedErrorResponse 有追踪信息的错误响应
type TrackedErrorResponse struct {
	Response
	TrackID string `json:"track_id"`
}

type Sample struct {
	// gorm.Model
	ID            int64   `json:"id"`             // 样品id
	SampleCode    string  `json:"sampleCode"`     // 样品编号
	SampleName    string  `json:"sampleName"`     // 样品名称
	RelateProject string  `json:"relatedProject"` // 所属项目
	Limit         string  `json:"limit"`          // 灵敏度 检测限值
	PreI1         uint    `json:"preI1"`          //预留字段
	PreF1         float32 `json:"preF1"`          //预留字段
	PreStr1       string  `json:"preStr1"`        //预留字段
}

type Project struct {
	// gorm.Model
	ID           int64   `json:"id"`            // 样品id
	ProjectName  string  `jsnon:"projectName"`  // 项目编号
	ProjectType  int     `jsnon:"projectType"`  //项目类型
	TestMethod   int     `jsnon:"testMethod"`   // 检测方法
	JudgeThresh  float64 `jsnon:"judgeThresh"`  // 判定标准
	Unint        string  `jsnon:"unit"`         // 项目编号
	Limit        string  `jsnon:"limit"`        // limit
	UpperLimit   float64 `jsnon:"upperLimit"`   // 上限
	LowerLimit   float64 `jsnon:"lowerLimit"`   // 下限
	CurveTc      string  `jsnon:"curveTc"`      // 曲线
	CurveDensity string  `jsnon:"curveDensity"` // 曲线
	QrcodeStr    string  `jsnon:"qrcodeStr"`    //二维码
}

type UnionProject struct {
	// gorm.Model
	ID           int64  `json:"id"`            // 样品id
	QrStrs       string `jsnon:"qrStrs"`       // 二维码
	UnisonString string `jsnon:"unisonString"` // 项目名称组合
	UnionType    int    `jsnon:"unionType"`    //项目类型
}

// 三位数错误编码为复用http原本含义
// 五位数错误编码为应用自定义错误
// 五开头的五位数错误编码为服务器端错误，比如数据库操作失败
// 四开头的五位数错误编码为客户端错误，有时候是客户端代码写错了，有时候是用户操作错误
const (
	// CodeCheckLogin 未登录
	CodeCheckLogin = 401
	// CodeNoRightErr 未授权访问
	CodeNoRightErr = 403
	//CodeParamErr 各种奇奇怪怪的参数错误
	CodeParamErr = 40001
	// 文件操作问题
	FileErr = 50001
	// 数据库操作问题
	DatabaseErr = 60001
)

// BuildSample 序列化视频
func BuildSample(item *model.Sample_bean_mfdcg) Sample {
	return Sample{
		ID:            item.ID,
		SampleCode:    item.SampleCode,
		SampleName:    item.SampleName,
		RelateProject: item.RelateProject,
		Limit:         item.Limit,
		PreI1:         item.PreI1,
		PreF1:         item.PreF1,
		PreStr1:       item.PreStr1,
	}
}

func BuildProject(item *model.Project_bean_mfdcg) Project {
	return Project{
		ID:           item.ID,
		ProjectName:  item.ProjectName,
		ProjectType:  item.ProjectType,
		TestMethod:   item.TestMethod,
		JudgeThresh:  item.JudgeThresh,
		Unint:        item.Unint,
		Limit:        item.Limit,
		UpperLimit:   item.UpperLimit,
		LowerLimit:   item.LowerLimit,
		CurveTc:      item.CurveTc,
		CurveDensity: item.CurveDensity,
		QrcodeStr:    item.QrcodeStr,
	}
}

func BuildUnionProject(item *model.Union_project_bean_mfdcg) UnionProject {
	return UnionProject{
		ID:           item.ID,
		QrStrs:       item.QrStrs,
		UnisonString: item.UnisonString,
		UnionType:    item.UnionType,
	}
}

// BuildVideos 序列化视频列表信息
func BuildSamples(items []*model.Sample_bean_mfdcg) (Samples []Sample) {
	var samples []Sample

	for _, item := range items {
		sample := BuildSample(item)
		samples = append(samples, sample)
	}
	return samples
}

// Projects 序列化
func BuildProejcts(items []*model.Project_bean_mfdcg) (Projects []Project) {
	var projects []Project

	for _, item := range items {
		project := BuildProject(item)
		projects = append(projects, project)
	}
	return projects
}

// UnionProjects 序列化
func BuildUnionProejcts(items []*model.Union_project_bean_mfdcg) (UnionProjects []UnionProject) {
	var projects []UnionProject

	for _, item := range items {
		project := BuildUnionProject(item)
		projects = append(projects, project)
	}
	return projects
}
